﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
using Microsoft.Web.WebPages.OAuth;
using WebMatrix.WebData;
using YGLAB_SON.Filters;
using YGLAB_SON.Models;

namespace YGLAB_SON.Controllers
{
	 [Authorize]
	 [InitializeSimpleMembership]
	 public class KullaniciController : Controller
	 {

		  public ActionResult Index() {

				return View();



		  }

		  private UsersContext db = new UsersContext();

		  public ActionResult Listele() {
				IEnumerable<UserProfile> result;

				var userFound = ( from m in db.UserProfiles select m ).ToList<UserProfile>();
				result = userFound;
				return View( result );
		  }



		  public ActionResult Sil( string username = "" ) {

				var aaa = username;

				Membership.DeleteUser( username , true );

				return RedirectToAction( "Listele" , "Kullanici" );

		  }


		  public ActionResult Roller( string username = "" ) {

				if( username.Length == 0 )
					 return RedirectToAction( "Listele" , "Kullanici" );

				ViewBag.username = username;


				string[] users = { "Editör" , "Hakem" , "Yazar" };
				SelectList list = new SelectList( users );
				ViewBag.roller = list;


				return View();

		  }



		  public ActionResult RolAyarla( string username = "" , string rol = "" , string sil = "" ) {

				if( username.Length == 0 || rol.Length == 0 )
					 return RedirectToAction( "Listele" , "Kullanici" );



				try {

					 if( sil == "true" && rol != "Kayıtlı Kullanıcı" )
						  Roles.RemoveUserFromRole( username , rol );
					 else
						  Roles.AddUserToRole( username , rol );
				}
				catch( Exception e ) {

					 ;
				}







				return RedirectToAction( "Listele" , "Kullanici" );

		  }






		  #region Helpers
		  private ActionResult RedirectToLocal( string returnUrl ) {
				if( Url.IsLocalUrl( returnUrl ) ) {
					 return Redirect( returnUrl );
				} else {
					 return RedirectToAction( "Index" , "Home" );
				}
		  }

		  public enum ManageMessageId
		  {
				ChangePasswordSuccess ,
				SetPasswordSuccess ,
				RemoveLoginSuccess ,
		  }

		  internal class ExternalLoginResult : ActionResult
		  {
				public ExternalLoginResult( string provider , string returnUrl ) {
					 Provider = provider;
					 ReturnUrl = returnUrl;
				}

				public string Provider { get; private set; }
				public string ReturnUrl { get; private set; }

				public override void ExecuteResult( ControllerContext context ) {
					 OAuthWebSecurity.RequestAuthentication( Provider , ReturnUrl );
				}
		  }

		  private static string ErrorCodeToString( MembershipCreateStatus createStatus ) {
				// See http://go.microsoft.com/fwlink/?LinkID=177550 for
				// a full list of status codes.
				switch( createStatus ) {
					 case MembershipCreateStatus.DuplicateUserName:
						  return "User name already exists. Please enter a different user name.";

					 case MembershipCreateStatus.DuplicateEmail:
						  return "A user name for that e-mail address already exists. Please enter a different e-mail address.";

					 case MembershipCreateStatus.InvalidPassword:
						  return "The password provided is invalid. Please enter a valid password value.";

					 case MembershipCreateStatus.InvalidEmail:
						  return "The e-mail address provided is invalid. Please check the value and try again.";

					 case MembershipCreateStatus.InvalidAnswer:
						  return "The password retrieval answer provided is invalid. Please check the value and try again.";

					 case MembershipCreateStatus.InvalidQuestion:
						  return "The password retrieval question provided is invalid. Please check the value and try again.";

					 case MembershipCreateStatus.InvalidUserName:
						  return "The user name provided is invalid. Please check the value and try again.";

					 case MembershipCreateStatus.ProviderError:
						  return "The authentication provider returned an error. Please verify your entry and try again. If the problem persists, please contact your system administrator.";

					 case MembershipCreateStatus.UserRejected:
						  return "The user creation request has been canceled. Please verify your entry and try again. If the problem persists, please contact your system administrator.";

					 default:
						  return "An unknown error occurred. Please verify your entry and try again. If the problem persists, please contact your system administrator.";
				}
		  }
		  #endregion



	 }
}
